草庐IT

反射简化 JDBC ResultSet

全部标签

c# - 使用具有 "params"参数的反射调用函数 (MethodBase)

我有两个函数的MethodBases:publicstaticintAdd(paramsint[]parameters){/*...*/}publicstaticintAdd(inta,intb){/*...*/}我有一个通过我创建的类调用MethodBases的函数:MethodBaseMethod;objectTarget;publicobjectcall(paramsobject[]input){returnMethod.Invoke(Target,input);}现在如果我AddTwoMethod.call(5,4);它工作正常。如果我使用AddMethod.call(5,4)

c# - 您将如何简化进入和退出 ReaderWriterLock?

这对我来说似乎很吵。五行开销太多了。m_Lock.EnterReadLock()TryReturnm_List.CountFinallym_Lock.ExitReadLock()EndTry那么你会如何简化这个呢? 最佳答案 我也是这么想的,但是在C#中;-pusingSystem;usingSystem.Threading;classProgram{staticvoidMain(){ReaderWriterLockSlimsync=newReaderWriterLockSlim();using(sync.Read()){//etc

c# - 如何通过反射获取集合中包含的类型

在我的代码的某些部分,我传递了一个T类型的对象集合。我不知道我将通过哪个具体集合,除了它实现IEnumerable。在运行时,我需要找出T是哪种类型(例如System.Double、System.String等...)。有什么办法可以查出来吗?更新:我或许应该更清楚地说明我工作的环境(Linq提供程序)。我的函数有一个像下面这样的签名,我在其中获取集合的类型作为参数:stringGetSymbolForType(TypecollectionType){}有什么方法可以从collectionType获取包含的对象类型吗? 最佳答案 来

c# - 生成动态方法来设置结构的字段而不是使用反射

假设我有以下代码更新struct的字段使用反射。由于结构实例被复制到DynamicUpdate方法,itneedstobeboxedtoanobjectbeforebeingpassed.structPerson{publicintid;}classTest{staticvoidMain(){objectperson=RuntimeHelpers.GetObjectValue(newPerson());DynamicUpdate(person);Console.WriteLine(((Person)person).id);//print10}privatestaticvoidDynam

c# - 使用反射创建通用委托(delegate)

我有以下代码:classProgram{staticvoidMain(string[]args){newProgram().Run();}publicvoidRun(){//worksFunc>static_delegate=newFunc>(SomeMethod);MethodInfomi=this.GetType().GetMethod("SomeMethod").MakeGenericMethod(newType[]{typeof(String)});//throwsArgumentException:ErrorbindingtotargetmethodFunc>reflecti

c# - 试图简化我们的存储库模式

目前我们已经在工作中实现了一个存储库模式。我们所有的存储库都位于它们自己的接口(interface)后面,并通过Ninject进行映射。我们的项目非常大,我试图解决的这个模式有几个怪癖。首先,在某些Controller中,我们需要将10到15个存储库都放在同一个Controller中。当请求如此多的存储库时,构造函数变得相当丑陋。在您调用多个存储库上的方法后,第二个怪癖就会显现出来。在处理多个存储库后,我们需要调用SaveChanges方法,但是我们应该在哪个存储库上调用它呢?每个存储库都有一个。所有存储库都注入(inject)了相同的EntityFramework数据上下文实例,因此

C# 使用 Dynamic 关键字通过字符串访问属性而无需反射

我想写类似下面的东西://Iwillpassinanumberof"properties"specifiedasstringsthatIwantmodifiedstring[]properties=new[]{"AllowEdit","AllowDelete"};//CastingthecomponentI'musingtoadynamicobjectofsomesort?dynamicd=myGridComponent;//Iterateoverthestringsandsetthepropertiesforeach(varsinproperties){//d.s=true;////

c# - 如何使用反射来简化构造函数和比较?

我讨厌一堆“左/右”方法。每次添加或删除属性时,我都必须修复每个方法。而且代码本身看起来……是错误的。publicFoo(Fooother){this.Bar=other.Bar;this.Baz=other.Baz;this.Lur=other.Lur;this.Qux=other.Qux;this.Xyzzy=other.Xyzzy;}实际上,这只是一个循环遍历属性的展开循环,在对象之间复制它们。那么为什么不诚实地面对这个事实呢?反射(reflection)救援!publicFoo(IFooother){foreach(varpropertyintypeof(IFoo).GetPr

c# - 如何使用反射在泛型类型中动态确定属性属于基类还是子类?

我有以下两个类(模型),一个是基类,另一个是子类:publicclassBaseClass{publicstringBaseProperty{get;set;}}publicclassChildClass:BaseClass{publicstringChildProperty{get;set;}}在应用程序中,我使用泛型动态调用ChildClassListpropertyNames=newList();foreach(PropertyInfoinfointypeof(T).GetProperties()){propertyNames.Add(info.Name);}在这里,在prope

c# - 使用反射调用静态方法时如何通过ref传递参数?

我正在使用反射在对象上调用静态方法:MyType.GetMethod("MyMethod",BindingFlags.Static).Invoke(null,newobject[]{Parameter1,Parameter2});如何通过ref而不是通过值来传递参数?我假设它们默认是按值计算的。第一个参数(数组中的“Parameter1”)应该是ref,但我不知道如何以这种方式传递它。 最佳答案 对于引用参数(或C#中的out),反射会将新值复制到对象数组中与原始参数相同的位置。您可以访问该值以查看更改后的引用。publicclas